# celery_tasks/order/tasks.py
from celery_tasks.celery_main import app
import logging
from django.utils import timezone
from datetime import timedelta

logger = logging.getLogger(__name__)


@app.task(name='cancel_expired_orders_task')
def cancel_expired_orders_task():
    """
    取消超时未支付订单定时任务
    """
    try:
        from shopping.models import Order

        # 设置超时时间（例如30分钟）
        timeout = timezone.now() - timedelta(minutes=30)

        # 查找超时未支付的订单（状态为0或1的订单）
        expired_orders = Order.objects.filter(
            create_time__lt=timeout,
            status__in=[0, 1]  # 0:待支付, 1:支付中
        )

        # 更新订单状态为已取消（假设状态3为已取消）
        updated_count = expired_orders.update(status=3)

        # 记录日志
        logger.info(f"取消超时订单任务完成: 共取消{updated_count}个订单")

        return {
            'cancelled_count': updated_count,
            'processed_at': timezone.now().isoformat()
        }

    except Exception as e:
        logger.error(f'取消超时订单任务异常: {e}')
        raise e
